Helper
M.U.G.E.N.에 캐릭터 제작 혹은 개조에 가장 많이 쓰이는 코드 중 하나로 독립적인 객체라는 의미를 가지고 있다. 어떻게 보면 C언어의 함수나 자바의 클래스와 비슷하다.Helper를 이용해서 이펙트를 보다 정밀하게 움직이게 할 수 있고 아예 소환술 형식의 공격도 가능하다. 옵션 파라미터 helpertype = type_string (deprecated -- do not use player-type helpers) If helpertype = normal, then the helper will be allowed to move off the edge of the screen. Furthermore, the camera will not move to try to keep the helper on screen. If helpertype = player, then the helper will be constrained to the screen and will be followed by the camera, just like a normal player. Defaults to normal. If you plan to use a helper for camera manipulation, do not use a player-type helpers (it is deprecated). Use the ScreenBound controller with the "movecamera" parameter if necessary. normal과 player중에 하나를 쓸수 있는데 기본값은 normal이며 player는 쓰지 말라고 나와있네요. player로 할 경우 플레이어캐릭터처럼 인식을 해서 그 헬퍼는 화면 밖으로 나갈수 없고 카메라가 비추는 위치에도 영향을 줍니다. 하지만 player타입을 쓰지말고 카메라를 조작하고싶으면 ScreenBound의 movecamera명령을 쓰라는군요. 그런데 Screenbound명령으로는 화면밖으로 못나가게 할수만 있고 카메라 비추는위치를 조작하진 못하더군요. name = "name_string" 헬퍼에 이름을 줍니다. 이름은 디버그모드사용시 나옵니다. 안쓰면 "캐릭터이름's helper"로 정해집니다. ID = id_no (정수) 아이디를 줍니다. 기본값은 0 pos = x_off, y_off (정수) 헬퍼 발생위치를 정하는 겁니다. Explod랑 같습니다. 기본값 0,0 postype = postype_string Explod와 마찬가지로 위의 pos파라미터의 기준을 정합니다. Explod와 다른점이 있는데 p1,p2를 제외한 값들의 y축 기준은 스테이지의 바닥이 됩니다. - p1 Explod와 같습니다. 기본값이며 자신의 축을 기준으로 합니다. - p2 이것도 Explod와 같습니다. p2를 기준으로 합니다. - front x기준은 익스플로드와 같이 현재 향한 방향쪽 화면 가장자리가 되는데 y기준은 스테이지의 바닥(라운드시작시 캐릭터가 있는 곳)이 기준이 됩니다. 익스플로드처럼 pos파라미터의 x값이 +가 될수록 화면 가운데에서 멀어지며 -가 될수록 화면 가운데쪽으로 표시됩니다. - back x기준은 현재 향한 방향의 반대쪽 화면 가장자리가 되는데 y기준은 스테이지의 바닥이 됩니다. 익스플로드처럼 pos파라미터의 x값이 +가 될수록 화면 가운데쪽으로 오며 -가 될수록 화면 가운데쪽에서 멀어집니다. - left x기준은 현재 방향에 상관없이 화면 왼쪽 구석이 되지만 y기준은 스테이지의 바닥 이 됩니다. 익스플로드처럼 pos파라미터의 x값이 +가 될수록 화면 오른쪽에 표시됩니다. - right x기준은 현재 방향에 상관없이 화면 오른쪽 구석이 되지만 y기준은 스테이지의 바닥이 됩니다. 익스플로드처럼 pos파라미터의 x값이 +가 될수록 화면 오른쪽에 표시됩니다. (원문엔 +가 될수록 화면 왼쪽에 나온다고 나와있지만 역시 틀렸습니다. left와 같습니다) facing = facing (정수) 익스플로드와 같습니다. 기본값은 1(안바꿈)이며 -1로 하면 생성시 방향을 반대로 바꿉니다. stateno = start_state (정수) 헬퍼의 시작 스텟을 지정합니다. 기본값은 0. keyctrl = ctrl_flag (boolean) 기본값은 0이며 1로 할 경우 본체캐릭터의 커맨드를 감지할수 있게 되며 본체캐릭터의 State -1을 물려받습니다.(-1 부분을 인식할수 있게 되는 듯. -1은 cmd파일에 있죠) 제캐릭터들의 AI발동용 헬퍼에 쓰였습니다. 하위폴더의 AI만들기 파일 참조. ownpal = pal_flag (boolean) 익스플로드와 같습니다. 기본값은 0이며 1로 할 경우 본체색변화의 영향을 안받습니다. 역시 거의모든 헬퍼에 ownpal = 1을 쓰게 될 것입니다. (근데 윈무겐 update.txt를 보니 윈무겐에선 ownpal = 0 으로 해도 본체색변화의 영향을 안받게 되었다고 합니다만 도스무겐을 위해 써줍시다) supermovetime = value (정수) 마찬가지. Superpause시에 움직일 수 있는 시간을 정합니다. 기본값 0. pausemovetime = move_time (정수) 이하동문. Pause시에 움직일수 있는 시간을 정합니다. 기본값 0. size.xscale (실수) size.yscale (실수) size.ground.back (정수) size.ground.front (정수) size.air.back (정수) size.air.front (정수) size.height (정수) size.proj.doscale (정수) size.head.pos (정수,정수) size.mid.pos (정수,정수) size.shadowoffset (정수) 이 파라미터들의 기본값은 본체캐릭터CNS처음부분에 있는 값들입니다. 다른 값을 써주면 생성되는 헬퍼의 해당 속성은 그 값으로 설정됩니다. 출처 Ihoo1836 강좌 기본적으로 많이 쓰이는 파라미터들로 정리가 되어 있다. size. 시리즈는 헬퍼의 크기를 조절해주는 파라미터인데 size.xscale나 size.yscale 제외하고 쓰이는 일이 거의 없다. 다만, 위 설명은 helper 코드에 대한 설명만 있으며 파라미터만 짠다고해서 helper가 자동으로 생성되는 것은 아니므로 helper Statedef은 별도로 만들어줘야 한다. 또한 헬퍼를 끝내기 위해서는 helper Statedef 내부에 반드시 0, DestroySelf type = DestroySelf trigger1 = animtime = 0 코드를 작성해줘야 한다. 그렇지 않으면 헬퍼가 계속 남는 현상이 발생되기 때문. 주의 사항 Helper는 많이 쓰이는 코드인 만큼 여러 오류를 발생시키기도 하는데 가장 대표적인 오류는 분신버그. 헬퍼가 분신 버그를 일으키는 가장 흔한 실수는 이와 같다. * 헬퍼 Statedef 번호가 일치하지 않는 경우 혹은 번호가 해당 Statedef이 존재하지 않는 번호일 경우. * 헬퍼에 피격 판정이 있는 경우 전자일 경우는 헬퍼의 Statedef 번호만 고쳐주면 되고 후자일 경우는 헬퍼에 Nothitby 코드를 넣거나 헬퍼 애니메이션에 피격 박스(파란 박스)만 없애면 된다.혹은 아예 이걸 역이용해서 헬퍼에 별도로 피격 Statedef을 넣기도 한다.대표적인게 KOF 99~2001의 스트라이커 시스템. 다만 후자처럼 했음에도 불구하고 어쩔수 없이 분신버그가 생기는 경우가 있는데 그게 바로 ReversalDef 코드를 활용한 반격기일 경우이다.(물론 Helper에 공격 판정이 없는 단순 이펙트를 활용한 Helper라면 상관없다.)이유는 ReversalDef 코드가 발동되면 일시적으로 무적이 무력화가 되는 현상이 생겨 반격도 캐릭터를 반격하는것이 아닌 Helper를 반격하는 현상이 되어버리기 때문에 분신버그가 생겨버린다.그렇다고 해도 헬퍼가 받은 반격데미지를 본체가 대신 받는다거나 하는건 아니다. 이 현상마저 생기지 않게 하려면 헬퍼 hitdef ATTR에 NP,SP,HP 등 이런 식으로 적어서 아예 헬퍼 공격 판정 자체를 장풍 판정으로 만드는 방법 밖에 없다.ReversalDef을 이용해서 장풍을 반격하는 기술은 잘 없으니. 그리고 가급적 Keyctrl를 0으로 맞출것을 권장.Keyctrl를 1로 맞출경우 AI를 만들지 않는다면 상관없지만 AI까지 만들어야 한다면 간혹 헬퍼가 자기 멋대로 사라지는 현상이 생기기 때문에 Keyctrl를 1로 설정해야 상황이 온다면 주의해야 한다.대표적인 캐릭터가 Devilpp의 Hazama. 기본 코드 이 항목은 헬퍼를 어떻게 사용하는지 보여주며 가장 기본적인 코드로 작성하였다. 1000 statetype = S movetype = A physics = S anim = 1000 poweradd = 100 juggle = 10 velset = 0,0 0 type = helper stateno = 1100 id = 1100 name = "helper" pos = 0,0 postype = p1 helpertype = normal keyctrl = 0 ownpal = 1 0 type = changestate trigger1 = animtime = 0 value = 0 ctrl = 1 1100 statetype = S movetype = A physics = S anim = 1100 velset = 0,0 0, DestroySelf type = DestroySelf trigger1 = animtime = 0